package cc.rengu.igas.bomp.common.dao;

import cc.rengu.igas.bomp.common.entity.MchntBaseInfo;
import cc.rengu.oltp.utility.bean.PageInfo;
import cc.rengu.oltp.utility.bean.PageResult;

import java.util.List;

/**
 * 商户基本信息表操作接口类
 * Created by 王成 on 2020/3/2
 * Updated by zhangxuran  on 2020/03/30
 */
public interface MchntBaseInfoMapper {
    /**
     * 登记商户基本信息
     *
     * @param mchntBaseInfo 商户基本信息
     * @return 0-成功，其它-失败
     * @throws Exception 异常
     */
    int insertMchntBaseInfo(MchntBaseInfo mchntBaseInfo) throws Exception;

    /**
     * 更新商户基本信息
     *
     * @param mchntBaseInfo 商户基本信息
     * @return 0-成功，其它-失败
     * @throws Exception 异常
     */
    int updateMchntBaseInfoById(MchntBaseInfo mchntBaseInfo) throws Exception;


    /**
     * 查询所有商户基本信息
     *
     * @return 商户基本信息列表
     * @throws Exception 异常
     */
    List<MchntBaseInfo> selectMchntBaseInfoList() throws Exception;

    /**
     * 根据非业务主键查询商户基本信息
     *
     * @param instId 多法人标识
     * @param id     非业务主键
     * @return 商户基本信息
     * @throws Exception 异常
     */
    MchntBaseInfo selectMchntBaseInfoById(String instId, String id) throws Exception;

    /**
     * 根据主键查询商户基本信息
     *
     * @param instId  多法人标识
     * @param mchntNo 商户号
     * @return 商户基本信息
     * @throws Exception 异常
     */
    MchntBaseInfo selectMchntBaseInfoByPrimaryKey(String instId, String mchntNo) throws Exception;

    /**
     * 根据商户号或商户名称模糊查询商户基本信息
     *
     * @param instId    多法人标识
     * @param mchntNo   商户号
     * @param mchntName 商户名称
     * @return 商户基本信息
     * @throws Exception 异常
     */
    List<MchntBaseInfo> selectMchntBaseInfoByMchntNoOrMchntName(String instId, String mchntNo, String mchntName) throws Exception;

    /**
     * 根据连锁商户号查询商户基本信息
     *
     * @param instId       多法人标识
     * @param chainMchntNo 连锁商户号
     * @return 商户基本信息
     * @throws Exception 异常
     */
    List<MchntBaseInfo> selectMchntBaseInfoByChainMchntNo(String instId, String chainMchntNo) throws Exception;

    /**
     * 根据平台商户号查询商户基本信息
     *
     * @param instId      多法人标识
     * @param platMchntNo 平台商户号
     * @return 商户基本信息
     * @throws Exception 异常
     */
    List<MchntBaseInfo> selectMchntBaseInfoByPlatMchntNo(String instId, String platMchntNo) throws Exception;

    /**
     * 根据集团商户号查询商户基本信息
     *
     * @param instId       多法人标识
     * @param groupMchntNo 集团商户号
     * @return 商户基本信息
     * @throws Exception 异常
     */
    List<MchntBaseInfo> selectMchntBaseInfoByGroupMchntNo(String instId, String groupMchntNo) throws Exception;

    /**
     * 根据代理商商户号查询商户基本信息
     *
     * @param instId       多法人标识
     * @param agentMchntNo 代理商商户号
     * @return 商户基本信息
     * @throws Exception 异常
     */
    List<MchntBaseInfo> selectMchntBaseInfoByAgentMchntNo(String instId, String agentMchntNo) throws Exception;

    /**
     * 根据拓展经理查询商户基本信息
     *
     * @param instId    多法人标识
     * @param managerId 拓展经理
     * @return 商户基本信息
     * @throws Exception 异常
     */
    List<MchntBaseInfo> selectMchntBaseInfoByManagerId(String instId, String managerId) throws Exception;

    /**
     * 根据签约机构查询商户基本信息
     *
     * @param instId     多法人标识
     * @param signInstId 商户签约机构
     * @return 商户基本信息
     * @throws Exception 异常
     */
    List<MchntBaseInfo> selectMchntBaseInfoBySignInstId(String instId, String signInstId) throws Exception;

    /**
     * 根据支付宝特殊商户查询条件查询商户基本信息
     *
     * @param instId     多法人标识
     * @param mchntNo    商户号
     * @param mchntName  商户名称
     * @param signInstId 商户签约机构
     * @return 商户基本信息
     * @throws Exception 异常
     */
    List<MchntBaseInfo> selectBompMchntBaseInfoByMchntInfo(String instId, String mchntNo, String mchntName, String signInstId) throws Exception;

    /**
     * 根据间联商户查询条件查询商户基本信息(导出)
     *
     * @param instId        多法人标识
     * @param mchntBaseInfo 商户信息
     * @return 商户基本信息列表
     * @throws Exception 异常
     */
    PageResult selectBompMchntBaseInfoByMchntInfoFilter(String instId, MchntBaseInfo mchntBaseInfo, PageInfo pageInfo) throws Exception;

    /**
     * 根据间联商户查询条件查询商户基本信息
     *
     * @param instId        多法人标识
     * @param mchntBaseInfo 商户信息
     * @return 商户基本信息列表
     * @throws Exception 异常
     */
    PageResult selectBompMchntBaseInfoByInspectTask(String instId, MchntBaseInfo mchntBaseInfo, PageInfo pageInfo) throws Exception;

    /**
     * 根据多个条件查询商户基本信息
     *
     * @param mchntBaseInfo 商户信息
     * @param pageInfo      分页信息
     * @return 商户基本信息列表
     * @throws Exception 异常
     */
    PageResult selectBompMchntBaseInfo(MchntBaseInfo mchntBaseInfo, PageInfo pageInfo) throws Exception;

    /**
     * 根据多个条件查询商户基本信息
     *
     * @param mchntBaseInfo 商户信息
     * @return 商户基本信息列表
     * @throws Exception 异常
     */
    List<MchntBaseInfo> selectBompMchntBaseInfoByInspectTasks(String instId, MchntBaseInfo mchntBaseInfo) throws Exception;

    /**
     * 根据多个条件查询商户基本信息
     *
     * @param mchntBaseInfo 商户信息
     * @return 商户基本信息列表
     * @throws Exception 异常
     */
    List<Object> selectMchntBaseInfoByInspectTask(String instId, MchntBaseInfo mchntBaseInfo) throws Exception;

    /**
     * 根据多个条件查询商户基本信息
     *
     * @param mchntBaseInfo 商户信息
     * @param pageInfo      分页信息
     * @return 商户基本信息列表
     * @throws Exception 异常
     */
    PageResult selectBompMchntBaseInfoByAuditStatus(MchntBaseInfo mchntBaseInfo, PageInfo pageInfo) throws Exception;

    /**
     * 根据签约机构号遍历查询
     *
     * @param mchntBaseInfo 商户号
     * @param pageInfo      分页
     * @return 信息
     */
    PageResult selectBompMchntBaseInfoBySignInstId(MchntBaseInfo mchntBaseInfo, PageInfo pageInfo) throws Exception;

    /**
     * 根据多个条件查询交易量偏低的商户基本信息
     *
     * @param mchntBaseInfo 入参实体类
     * @return 商户基本信息列表
     * @throws Exception 异常
     */
    List<Object> selectBompTxnStaticByInspectTask(MchntBaseInfo mchntBaseInfo) throws Exception;

    /**
     * 根据多个条件查询交易量偏低的商户基本信息
     *
     * @param mchntBaseInfo 入参实体类
     * @return 商户基本信息列表
     * @throws Exception 异常
     */
    PageResult selectBompTxnStaticByInspectTask(MchntBaseInfo mchntBaseInfo, PageInfo pageInfo) throws Exception;

    /**
     * 查询微信活动商户
     *
     * @param mchntBaseInfo 商户号
     * @param pageInfo      分页
     * @return 信息
     */
    PageResult selectWechatActivityMchntBaseInfo(MchntBaseInfo mchntBaseInfo, PageInfo pageInfo) throws Exception;
}
